/**
 * @type {number[]}
 */
const c3 = Array.from({ length: 100 });
c3[0] = 1;
/**
 * 使用递推公式计算第n个Catalan数的函数
 * @param {number} n 输入的整数
 * @returns {number} - 第n个Catalan数
 */
function catalan(n) {
  // 如果n为0，则返回1，因为第0个Catalan数为1
  // if (n === 0) return 1;
  // 如果数组c3中已经计算过n的Catalan数，则直接返回结果
  // 否则，使用递推公式计算Catalan数并存储在数组c3中
  // eslint-disable-next-line unicorn/prefer-logical-operator-over-ternary
  return c3[n] ? c3[n] : (c3[n] = ((4 * n - 2) * catalan(n - 1)) / (n + 1));
}
